package com.davidlife.framework.mybatis.dao;

import com.davidlife.framework.mybatis.domain.QueryVo;
import com.davidlife.framework.mybatis.domain.User;

import java.util.List;

public interface UserDao {
    /**
     * 查询所有操作
     *
     * @return
     */
    //@Select("select * from user")  //使用注解，这时UserDao.xml配置文件就不需要了，同时SqlMapConfig.xml中
    List<User> findAll();

    /**
     * 保存用户
     *
     * @param user
     */
    void saveUser(User user);

    /**
     * 更新用户信息
     *
     * @param user
     */
    void updateUser(User user);

    /**
     * 根据id删除用户
     *
     * @param userId
     */
    void deleteUser(Integer userId);

    /**
     * 根据id查询用户
     *
     * @param userId
     * @return
     */
    User findById(Integer userId);

    /**
     * 根据用户名模糊查询用户
     * 相当于使用PrepareStatement的方式
     *
     * @param username
     * @return
     */
    List<User> findByUsername(String username);

    /**
     * 根据用户名模糊查询用户
     * 相当与使用Statement，通过字符串拼接sql语句的方式
     *
     * @param username
     * @return
     */
    List<User> findByUsername2(String username);

    /**
     * 查询总用户数
     *
     * @return
     */
    int findTotal();

    /**
     * 根据QueryVo中的条件查询用户
     * @param vo
     * @return
     */
    List<User> findByVo(QueryVo vo);

    /**
     * 根据动态条件查询User
     * @return
     */
    List<User> findByCondition(User user);

    /**
     * 根据QueryVo中提供的id集合，查询用户信息
     * @param vo
     * @return
     */
    List<User> findUserInIds(QueryVo vo);
}
